from src.util.Service import *


# 字段参数校验
def __authParam(body):
    if not authParam(body.get('method'), ['POST', 'GET', 'DELETE', 'PUT']):
        return False
    if not authParam(body.get('key'), ['sys', 'user', 'public']):
        return False
    if not authParam(body.get('type'), ['handle', 'sign']):
        return False
    return True


# 获取系统 所有的接口(分页 所有信息)
def getHandleAll(page: Page = Page(), cdn: dict = None):
    Handles = SysHandle.getAllHandle(page, cdn)
    return Handles


# 获取系统所有的接口 (分页 id 接口名字)
def getHandleName(page: Page = Page(), cdn: dict = None):
    Handles = SysHandle.getAllHandleName(page, cdn)
    return Handles


# 添加系统接口
def addHandle(data: dict):
    try:
        if not __authParam(data):
            return False
        data['status'] = '1'
        data['log'] = '0'
        return SysHandle.addHandle(data)
    except:
        return False


# 修改系统接口 （字段校验）
def updateHandle(k: dict):
    h_id = int(k['hId'])
    k = formatParam(k, ['hId', 'log'])
    # print(k)
    try:
        if not __authParam(k):
            return False

        return SysHandle.updateHandle([h_id], k)
    except:
        return False


def handleLog(ids: list[int], s='0'):
    if not authParam(s, ['0', '1']):
        return False
    SysHandle.updateHandle(ids, {'log': s})
    return True


# 删除系统接口 （使用事务删除映射关系）
def delHandle(hid: list[int]):
    # 在角色接口映射表中删除 hid 的映射关系
    # 在菜单接口映射表中删除 hid 的映射关系
    database.transaction()
    try:
        with database.atomic():
            RoleHandle.delRoleHandleInHid(hid)
            GroupAuth.delAuthByTypeAndAuth(hid, 'route')
            SysHandle.delHandleInId(hid)
            database.commit()
    except:
        database.rollback()
        return False
    return True
